OpenGL ES 2.0 shader 최적화 방안 :: OPEN GL ES[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

OPEN GL ES
[1]
등록일:2018-06-24 15:40:51 (0%)
작성자:
제목:OpenGL ES 2.0 shader 최적화 방안
  • Per fragment 계산 대신 per vertex 계산을 하라
    • Fragment 수가 vertex 수보다 훨씬 많다.
  • 복잡한 수학 function을 사용하는 대신 look-up texture을 사용해라
  • 사용하는 varying의 개수를 최소화하고 precision을 낮게 설정해라.
    • Vertex shader에서 fragment shader로 넘어가는 varying 변수는 interpolation을 통해 vertex 단위 정보에서 픽셀 단위 정보로 변환된다.
    • Varying 변수는 파라미터 버퍼에 메모리를 할당해야 하고 interpolation 오버헤드가 발생한다.
    • Varying 변수의 precision을 낮게 설정하여 공간, 메모리 bandwidth를 줄일 수 있다.
      • Texture coordinates같은 경우는 mediump로도 충분하다.
      • Color, normal 정보는 lowp만 사용해도 충분하다.
  • Fragment shader 코드를 최대한 짧게 유지해라.
    • Fragment shader는 픽셀 단위로 수행되기 때문에 shader 코드가 조금만 복잡해져도 프로그램이 상당히 느려질 수 있다.
    • Fragment shader 코드를 최대한 짧고 간결하게 최적화하면 성능 향상이 있다.
  • Non-dependent texture read가 되게 하라.
    • Dependent texture read: texture 좌표가 shader에서 수행되는 계산의 결과에 따라 달라지는 경우
    • Dependent texture read는 non-dependent texture read보다 더 많은 GPU cycle을 소모한다.
  • Precision (highp, mediump, lowp)을 최적화 해라.
    • 변수의 사용 목적에 따라 precision을 알맞게 조절하여 공간, 메모리 bandwidth를 절약할 수 있다.
    • Highp 가 사용되는 경우: float, vertex 위치 계산, texture 좌표 계산, lighting 계산 등 32-bit data
    • Mediump가 사용되는 경우: texture 좌표 varying 등 [-65520, 65520] 범위의 16-bit data
    • Lowp가 사용되는 경우: color, normals 등 [-2,2] 범위의 10-bit data
  • 사용하는 uniform 개수를 최소화하고 불필요하게 uniform 변수가 사용되지 않게 해라.
  • If-else, for, while과 같은 조건문을 사용하여 불필요한 코드가 수행되지 않게 해라.
  • Highp precision을 사용한 scalar 계산이 vector화 되는 것을 막아라.
    • Scalar와 vector를 곱해야 할 때 scalar 연산을 모두 수행한 후 vector와 곱하여 최대한 scalar 상태를 유지해라.

Highp vec4 v1, v2;
Highp float x, y;
// Bad
v2 = (v1 * x) * y;
// Good
v2 = v1 * (x * y);

  • Matrix의 대부분 element가 0일 때에는 full matrix 곱셈을 하지 마라.
  • Fragment shader에서 discard를 쓰지 말아라.

[본문링크] OpenGL ES 2.0 shader 최적화 방안
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34662
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.